Skip to content

Conversation

@nflaig
Copy link
Member

@nflaig nflaig commented Feb 8, 2026

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @nflaig, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request brings the codebase up-to-date with the v1.7.0-alpha.2 version of the Ethereum consensus specifications, primarily focusing on the gloas fork. The changes streamline the handling of KZG commitments within execution payloads, enhance the accuracy and efficiency of builder deposit processing, and optimize the calculation of the Payload Timeliness Committee. Additionally, it includes critical adjustments to withdrawal sweep mechanisms and updates to key configuration parameters, ensuring the client's adherence to the latest protocol definitions.

Highlights

  • Spec Version Update: The project has been updated to align with Ethereum consensus specs v1.7.0-alpha.2.
  • Blob KZG Commitments Refactor: The handling of blobKzgCommitments has been refactored, moving them from the ExecutionPayloadEnvelope to the ExecutionPayloadBid. This changes where commitment limits are enforced and how sidecars are generated.
  • Builder Deposit Processing Enhancements: Builder deposit logic has been improved to correctly onboard pending builders during the gloas fork upgrade and to use the deposit slot for epoch calculation.
  • Payload Timeliness Committee (PTC) Optimization: The computation of the Payload Timeliness Committee (PTC) has been optimized for lazy, per-slot calculation, reducing eager computation overhead.
  • Withdrawal Sweep Logic Refinement: The logic for processing withdrawals (builder, pending partial, and validator sweeps) has been updated to use a >= comparison for withdrawal limits, ensuring correct behavior when the limit is met or exceeded.
  • Configuration Updates: The MIN_BUILDER_WITHDRAWABILITY_DELAY constant has been significantly reduced in both mainnet and minimal configurations, reflecting updated spec values.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • packages/beacon-node/test/spec/specTestVersioning.ts
    • Updated specVersion to v1.7.0-alpha.2.
  • packages/beacon-node/test/spec/utils/specTestIterator.ts
    • Modified gloas test skipping logic to only skip finality and fork_choice tests, while running sanity and transition tests.
  • packages/beacon-node/test/unit/util/kzg.test.ts
    • Added type casting for DataColumnSidecars.
    • Increased test timeout for a KZG test to 60 seconds.
  • packages/config/src/chainConfig/configs/mainnet.ts
    • Decreased MIN_BUILDER_WITHDRAWABILITY_DELAY from 4096 to 64.
  • packages/config/src/chainConfig/configs/minimal.ts
    • Decreased MIN_BUILDER_WITHDRAWABILITY_DELAY from 8 to 2.
  • packages/state-transition/src/block/processDepositRequest.ts
    • Modified applyDepositForBuilder and addBuilderToRegistry to accept and use slot for deposit epoch calculation.
    • Updated calls to applyDepositForBuilder in processDepositRequest to pass the current state slot.
  • packages/state-transition/src/block/processExecutionPayloadBid.ts
    • Added blobKzgCommitments limit verification, moved from processExecutionPayloadEnvelope.
  • packages/state-transition/src/block/processExecutionPayloadEnvelope.ts
    • Removed blobKzgCommitments related verification, as it was moved to processExecutionPayloadBid.
  • packages/state-transition/src/block/processWithdrawals.ts
    • Changed withdrawal limit check from == to >= in getValidatorsSweepWithdrawals to prevent potential overflows.
  • packages/state-transition/src/cache/epochCache.ts
    • Refactored Payload Timeliness Committee (PTC) caching to be lazy and per-slot, storing only the seed.
    • Updated getPayloadTimelinessCommittee method to compute the committee on demand if not cached.
  • packages/state-transition/src/signatureSets/indexedPayloadAttestation.ts
    • Updated getPayloadAttestationDataSigningRoot to use attestation.data.slot for domain epoch calculation, aligning with spec changes.
  • packages/state-transition/src/slot/upgradeStateToGloas.ts
    • Implemented onboardBuildersFromPendingDeposits to process pending deposits for builders during the gloas state upgrade.
  • packages/state-transition/src/util/gloas.ts
    • Updated builder index utility functions (isBuilderIndex, convertBuilderIndexToValidatorIndex, convertValidatorIndexToBuilderIndex) to use arithmetic operations instead of bitwise operations for BUILDER_INDEX_FLAG due to its size.
  • packages/state-transition/src/util/seed.ts
    • Replaced eager PTC computation with lazy computePayloadTimelinessCommitteeForSlot.
    • Optimized internal hash computation within naiveComputePayloadTimelinessCommitteeIndices by pre-allocating a buffer and recomputing the hash less frequently.
  • packages/types/src/gloas/sszTypes.ts
    • Updated SSZ types for ExecutionPayloadBid to include blobKzgCommitments directly instead of blobKzgCommitmentsRoot.
    • Removed blobKzgCommitments from ExecutionPayloadEnvelope SSZ type.
    • Removed kzgCommitments field from DataColumnSidecar SSZ type.
  • specrefs/.ethspecify.yml
    • Updated spec version from v1.7.0-alpha.1 to v1.7.0-alpha.2.
    • Removed multi_exp#deneb and get_builder_from_deposit#gloas from exceptions.
  • specrefs/configs.yml
    • Updated MIN_BUILDER_WITHDRAWABILITY_DELAY spec value from 4096 to 64 and updated its hash.
  • specrefs/containers.yml
    • Updated spec definitions and hashes for DataColumnSidecar, ExecutionPayloadBid, and ExecutionPayloadEnvelope to reflect changes in SSZ types.
  • specrefs/functions.yml
    • Updated spec definitions and hashes for various functions including add_builder_to_registry#gloas, apply_deposit_for_builder#gloas, compute_domain#phase0, get_builder_withdrawals#gloas, get_builders_sweep_withdrawals#gloas, get_pending_partial_withdrawals#electra, get_validators_sweep_withdrawals#capella, get_validators_sweep_withdrawals#electra, get_data_column_sidecars#gloas, get_data_column_sidecars_from_block#gloas, get_data_column_sidecars_from_column_sidecar#gloas, get_domain#phase0, get_ptc_assignment#gloas, is_valid_indexed_payload_attestation#gloas, prepare_execution_payload#capella, prepare_execution_payload#gloas, process_deposit_request#gloas, process_execution_payload#gloas, process_execution_payload_bid#gloas, slash_validator (all forks), upgrade_to_gloas#gloas, and verify_data_column_sidecar#gloas to reflect parameter changes, logic adjustments, and type hints.
    • Removed get_builder_from_deposit#gloas spec.
    • Added new specs for is_data_available#gloas and onboard_builders_from_pending_deposits#gloas.
    • Added new spec for verify_data_column_sidecar_kzg_proofs#gloas.
Activity
  • The pull request was created by nflaig.
  • The title indicates a feature update to spec v1.7.0-alpha.2 and is marked as [wip].
  • No explicit reviewer comments or approvals are available in the provided context.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the codebase to align with the v1.7.0-alpha.2 consensus spec. The changes are extensive, touching configuration, state transition logic, caching, and type definitions. The refactoring of the Payload Timeliness Committee (PTC) handling to a lazy computation model is a notable performance improvement.

I've reviewed the changes and found a couple of potential issues. One is related to an incorrect optimization in the onboardBuildersFromPendingDeposits function that could lead to incorrect state during the Gloas fork upgrade. Another is a potential integer overflow bug in an optimized hashing function in seed.ts that could affect consensus in edge cases. My detailed comments are below.

Comment on lines 322 to 324
hashInput.writeUInt32LE(block, seed.length);
// Zero the upper 4 bytes for correct 8-byte little-endian encoding
hashInput.writeUInt32LE(0, seed.length + 4);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This optimization to write a 64-bit little-endian integer using writeUInt32LE is unsafe and can lead to incorrect behavior. The block variable, calculated as Math.floor(i / 16), can grow larger than 2**32 - 1 if the while loop runs for many iterations (e.g., in scenarios with very low effective balances). writeUInt32LE will truncate values larger than 32 bits, leading to an incorrect hash input and a potential consensus split.

You should use a method that safely handles 64-bit integers, such as Buffer.writeBigUInt64LE() or by using a DataView.

Suggested change
hashInput.writeUInt32LE(block, seed.length);
// Zero the upper 4 bytes for correct 8-byte little-endian encoding
hashInput.writeUInt32LE(0, seed.length + 4);
hashInput.writeBigUInt64LE(BigInt(block), seed.length);

@nflaig
Copy link
Member Author

nflaig commented Feb 8, 2026

@codex review

@github-actions
Copy link
Contributor

github-actions bot commented Feb 8, 2026

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: 034edee Previous: 45b0426 Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 1.1789 ms/op 888.72 us/op 1.33
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 36.825 us/op 34.559 us/op 1.07
BLS verify - blst 751.89 us/op 862.37 us/op 0.87
BLS verifyMultipleSignatures 3 - blst 1.1496 ms/op 1.2847 ms/op 0.89
BLS verifyMultipleSignatures 8 - blst 1.6051 ms/op 2.1370 ms/op 0.75
BLS verifyMultipleSignatures 32 - blst 4.8043 ms/op 4.5584 ms/op 1.05
BLS verifyMultipleSignatures 64 - blst 8.7931 ms/op 8.6243 ms/op 1.02
BLS verifyMultipleSignatures 128 - blst 16.861 ms/op 16.488 ms/op 1.02
BLS deserializing 10000 signatures 674.75 ms/op 640.21 ms/op 1.05
BLS deserializing 100000 signatures 6.7723 s/op 6.1574 s/op 1.10
BLS verifyMultipleSignatures - same message - 3 - blst 901.65 us/op 932.23 us/op 0.97
BLS verifyMultipleSignatures - same message - 8 - blst 1.0242 ms/op 1.0582 ms/op 0.97
BLS verifyMultipleSignatures - same message - 32 - blst 1.6946 ms/op 1.6434 ms/op 1.03
BLS verifyMultipleSignatures - same message - 64 - blst 2.5521 ms/op 2.4603 ms/op 1.04
BLS verifyMultipleSignatures - same message - 128 - blst 4.3099 ms/op 4.0066 ms/op 1.08
BLS aggregatePubkeys 32 - blst 18.947 us/op 17.041 us/op 1.11
BLS aggregatePubkeys 128 - blst 68.279 us/op 60.115 us/op 1.14
getSlashingsAndExits - default max 66.997 us/op 42.188 us/op 1.59
getSlashingsAndExits - 2k 319.81 us/op 331.49 us/op 0.96
isKnown best case - 1 super set check 208.00 ns/op 399.00 ns/op 0.52
isKnown normal case - 2 super set checks 204.00 ns/op 403.00 ns/op 0.51
isKnown worse case - 16 super set checks 206.00 ns/op 406.00 ns/op 0.51
validate api signedAggregateAndProof - struct 1.4742 ms/op 1.9981 ms/op 0.74
validate gossip signedAggregateAndProof - struct 1.3677 ms/op 1.9152 ms/op 0.71
batch validate gossip attestation - vc 640000 - chunk 32 116.37 us/op 110.14 us/op 1.06
batch validate gossip attestation - vc 640000 - chunk 64 100.76 us/op 109.76 us/op 0.92
batch validate gossip attestation - vc 640000 - chunk 128 95.021 us/op 86.393 us/op 1.10
batch validate gossip attestation - vc 640000 - chunk 256 95.957 us/op 82.160 us/op 1.17
bytes32 toHexString 355.00 ns/op 513.00 ns/op 0.69
bytes32 Buffer.toString(hex) 246.00 ns/op 410.00 ns/op 0.60
bytes32 Buffer.toString(hex) from Uint8Array 326.00 ns/op 498.00 ns/op 0.65
bytes32 Buffer.toString(hex) + 0x 249.00 ns/op 413.00 ns/op 0.60
Return object 10000 times 0.23260 ns/op 0.23030 ns/op 1.01
Throw Error 10000 times 4.5663 us/op 3.3913 us/op 1.35
toHex 150.28 ns/op 91.026 ns/op 1.65
Buffer.from 122.08 ns/op 85.905 ns/op 1.42
shared Buffer 81.441 ns/op 57.925 ns/op 1.41
fastMsgIdFn sha256 / 200 bytes 1.8650 us/op 1.6250 us/op 1.15
fastMsgIdFn h32 xxhash / 200 bytes 203.00 ns/op 369.00 ns/op 0.55
fastMsgIdFn h64 xxhash / 200 bytes 259.00 ns/op 453.00 ns/op 0.57
fastMsgIdFn sha256 / 1000 bytes 5.9780 us/op 5.0480 us/op 1.18
fastMsgIdFn h32 xxhash / 1000 bytes 295.00 ns/op 463.00 ns/op 0.64
fastMsgIdFn h64 xxhash / 1000 bytes 306.00 ns/op 524.00 ns/op 0.58
fastMsgIdFn sha256 / 10000 bytes 51.575 us/op 39.975 us/op 1.29
fastMsgIdFn h32 xxhash / 10000 bytes 1.3700 us/op 1.4600 us/op 0.94
fastMsgIdFn h64 xxhash / 10000 bytes 893.00 ns/op 1.1050 us/op 0.81
send data - 1000 256B messages 13.866 ms/op 11.360 ms/op 1.22
send data - 1000 512B messages 16.400 ms/op 14.157 ms/op 1.16
send data - 1000 1024B messages 23.192 ms/op 16.975 ms/op 1.37
send data - 1000 1200B messages 22.645 ms/op 14.723 ms/op 1.54
send data - 1000 2048B messages 25.646 ms/op 16.212 ms/op 1.58
send data - 1000 4096B messages 26.900 ms/op 15.522 ms/op 1.73
send data - 1000 16384B messages 91.849 ms/op 103.41 ms/op 0.89
send data - 1000 65536B messages 279.38 ms/op 208.57 ms/op 1.34
enrSubnets - fastDeserialize 64 bits 1.0760 us/op 968.00 ns/op 1.11
enrSubnets - ssz BitVector 64 bits 348.00 ns/op 525.00 ns/op 0.66
enrSubnets - fastDeserialize 4 bits 133.00 ns/op 331.00 ns/op 0.40
enrSubnets - ssz BitVector 4 bits 354.00 ns/op 512.00 ns/op 0.69
prioritizePeers score -10:0 att 32-0.1 sync 2-0 226.06 us/op 253.27 us/op 0.89
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 260.43 us/op 288.97 us/op 0.90
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 362.52 us/op 341.18 us/op 1.06
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 731.64 us/op 604.66 us/op 1.21
prioritizePeers score 0:0 att 64-1 sync 4-1 847.49 us/op 1.0145 ms/op 0.84
array of 16000 items push then shift 1.6101 us/op 1.1757 us/op 1.37
LinkedList of 16000 items push then shift 7.4720 ns/op 7.3690 ns/op 1.01
array of 16000 items push then pop 91.891 ns/op 62.529 ns/op 1.47
LinkedList of 16000 items push then pop 7.2960 ns/op 6.0270 ns/op 1.21
array of 24000 items push then shift 2.3793 us/op 1.7619 us/op 1.35
LinkedList of 24000 items push then shift 8.4350 ns/op 7.0310 ns/op 1.20
array of 24000 items push then pop 107.20 ns/op 88.270 ns/op 1.21
LinkedList of 24000 items push then pop 7.1060 ns/op 6.0430 ns/op 1.18
intersect bitArray bitLen 8 5.7800 ns/op 4.6380 ns/op 1.25
intersect array and set length 8 34.053 ns/op 28.145 ns/op 1.21
intersect bitArray bitLen 128 29.195 ns/op 25.046 ns/op 1.17
intersect array and set length 128 572.91 ns/op 469.30 ns/op 1.22
bitArray.getTrueBitIndexes() bitLen 128 1.0060 us/op 1.1470 us/op 0.88
bitArray.getTrueBitIndexes() bitLen 248 1.7940 us/op 1.9490 us/op 0.92
bitArray.getTrueBitIndexes() bitLen 512 3.7030 us/op 3.7820 us/op 0.98
Full columns - reconstruct all 6 blobs 265.85 us/op 305.72 us/op 0.87
Full columns - reconstruct half of the blobs out of 6 116.91 us/op 93.762 us/op 1.25
Full columns - reconstruct single blob out of 6 31.326 us/op 30.040 us/op 1.04
Half columns - reconstruct all 6 blobs 275.18 ms/op 235.52 ms/op 1.17
Half columns - reconstruct half of the blobs out of 6 140.19 ms/op 119.02 ms/op 1.18
Half columns - reconstruct single blob out of 6 51.649 ms/op 44.629 ms/op 1.16
Full columns - reconstruct all 10 blobs 280.61 us/op 350.53 us/op 0.80
Full columns - reconstruct half of the blobs out of 10 160.47 us/op 202.27 us/op 0.79
Full columns - reconstruct single blob out of 10 30.758 us/op 35.998 us/op 0.85
Half columns - reconstruct all 10 blobs 455.58 ms/op 390.04 ms/op 1.17
Half columns - reconstruct half of the blobs out of 10 229.54 ms/op 198.50 ms/op 1.16
Half columns - reconstruct single blob out of 10 53.988 ms/op 44.291 ms/op 1.22
Full columns - reconstruct all 20 blobs 508.17 us/op 657.74 us/op 0.77
Full columns - reconstruct half of the blobs out of 20 258.25 us/op 316.49 us/op 0.82
Full columns - reconstruct single blob out of 20 31.514 us/op 39.331 us/op 0.80
Half columns - reconstruct all 20 blobs 918.89 ms/op 779.82 ms/op 1.18
Half columns - reconstruct half of the blobs out of 20 452.03 ms/op 427.59 ms/op 1.06
Half columns - reconstruct single blob out of 20 49.628 ms/op 44.501 ms/op 1.12
Set add up to 64 items then delete first 2.0574 us/op 1.6665 us/op 1.23
OrderedSet add up to 64 items then delete first 3.0688 us/op 2.5391 us/op 1.21
Set add up to 64 items then delete last 2.3201 us/op 1.7757 us/op 1.31
OrderedSet add up to 64 items then delete last 3.3445 us/op 2.5973 us/op 1.29
Set add up to 64 items then delete middle 2.3287 us/op 1.7872 us/op 1.30
OrderedSet add up to 64 items then delete middle 4.8822 us/op 4.3565 us/op 1.12
Set add up to 128 items then delete first 4.8303 us/op 3.4357 us/op 1.41
OrderedSet add up to 128 items then delete first 7.6390 us/op 5.4183 us/op 1.41
Set add up to 128 items then delete last 4.7047 us/op 3.3265 us/op 1.41
OrderedSet add up to 128 items then delete last 6.8150 us/op 4.9802 us/op 1.37
Set add up to 128 items then delete middle 4.6410 us/op 3.3237 us/op 1.40
OrderedSet add up to 128 items then delete middle 13.242 us/op 10.675 us/op 1.24
Set add up to 256 items then delete first 10.190 us/op 6.7248 us/op 1.52
OrderedSet add up to 256 items then delete first 15.570 us/op 10.807 us/op 1.44
Set add up to 256 items then delete last 9.4581 us/op 6.7073 us/op 1.41
OrderedSet add up to 256 items then delete last 14.997 us/op 10.289 us/op 1.46
Set add up to 256 items then delete middle 9.3205 us/op 6.6128 us/op 1.41
OrderedSet add up to 256 items then delete middle 41.221 us/op 33.268 us/op 1.24
pass gossip attestations to forkchoice per slot 2.5470 ms/op 2.0377 ms/op 1.25
forkChoice updateHead vc 100000 bc 64 eq 0 506.41 us/op 366.75 us/op 1.38
forkChoice updateHead vc 600000 bc 64 eq 0 3.0200 ms/op 2.1864 ms/op 1.38
forkChoice updateHead vc 1000000 bc 64 eq 0 4.9961 ms/op 3.6375 ms/op 1.37
forkChoice updateHead vc 600000 bc 320 eq 0 3.0422 ms/op 2.1948 ms/op 1.39
forkChoice updateHead vc 600000 bc 1200 eq 0 3.0099 ms/op 2.2232 ms/op 1.35
forkChoice updateHead vc 600000 bc 7200 eq 0 3.4156 ms/op 2.8417 ms/op 1.20
forkChoice updateHead vc 600000 bc 64 eq 1000 3.4547 ms/op 3.0663 ms/op 1.13
forkChoice updateHead vc 600000 bc 64 eq 10000 3.5623 ms/op 4.3265 ms/op 0.82
forkChoice updateHead vc 600000 bc 64 eq 300000 9.6854 ms/op 7.5716 ms/op 1.28
computeDeltas 1400000 validators 0% inactive 14.515 ms/op 13.056 ms/op 1.11
computeDeltas 1400000 validators 10% inactive 15.373 ms/op 12.305 ms/op 1.25
computeDeltas 1400000 validators 20% inactive 12.957 ms/op 11.850 ms/op 1.09
computeDeltas 1400000 validators 50% inactive 10.018 ms/op 8.4943 ms/op 1.18
computeDeltas 2100000 validators 0% inactive 22.072 ms/op 19.244 ms/op 1.15
computeDeltas 2100000 validators 10% inactive 20.545 ms/op 18.988 ms/op 1.08
computeDeltas 2100000 validators 20% inactive 19.298 ms/op 17.995 ms/op 1.07
computeDeltas 2100000 validators 50% inactive 15.055 ms/op 12.725 ms/op 1.18
altair processAttestation - 250000 vs - 7PWei normalcase 2.0134 ms/op 1.5922 ms/op 1.26
altair processAttestation - 250000 vs - 7PWei worstcase 2.7593 ms/op 2.2843 ms/op 1.21
altair processAttestation - setStatus - 1/6 committees join 116.72 us/op 95.170 us/op 1.23
altair processAttestation - setStatus - 1/3 committees join 220.13 us/op 172.88 us/op 1.27
altair processAttestation - setStatus - 1/2 committees join 315.72 us/op 235.34 us/op 1.34
altair processAttestation - setStatus - 2/3 committees join 408.64 us/op 311.39 us/op 1.31
altair processAttestation - setStatus - 4/5 committees join 549.96 us/op 488.35 us/op 1.13
altair processAttestation - setStatus - 100% committees join 661.63 us/op 568.92 us/op 1.16
altair processBlock - 250000 vs - 7PWei normalcase 4.5719 ms/op 3.0419 ms/op 1.50
altair processBlock - 250000 vs - 7PWei normalcase hashState 17.496 ms/op 14.028 ms/op 1.25
altair processBlock - 250000 vs - 7PWei worstcase 26.201 ms/op 22.491 ms/op 1.16
altair processBlock - 250000 vs - 7PWei worstcase hashState 59.216 ms/op 53.369 ms/op 1.11
phase0 processBlock - 250000 vs - 7PWei normalcase 1.5713 ms/op 1.5764 ms/op 1.00
phase0 processBlock - 250000 vs - 7PWei worstcase 21.053 ms/op 19.693 ms/op 1.07
altair processEth1Data - 250000 vs - 7PWei normalcase 397.09 us/op 295.61 us/op 1.34
getExpectedWithdrawals 250000 eb:1,eth1:1,we:0,wn:0,smpl:16 6.9750 us/op 5.4370 us/op 1.28
getExpectedWithdrawals 250000 eb:0.95,eth1:0.1,we:0.05,wn:0,smpl:220 46.398 us/op 42.736 us/op 1.09
getExpectedWithdrawals 250000 eb:0.95,eth1:0.3,we:0.05,wn:0,smpl:43 12.007 us/op 13.245 us/op 0.91
getExpectedWithdrawals 250000 eb:0.95,eth1:0.7,we:0.05,wn:0,smpl:19 7.5270 us/op 3.8980 us/op 1.93
getExpectedWithdrawals 250000 eb:0.1,eth1:0.1,we:0,wn:0,smpl:1021 153.84 us/op 148.38 us/op 1.04
getExpectedWithdrawals 250000 eb:0.03,eth1:0.03,we:0,wn:0,smpl:11778 1.7614 ms/op 1.2957 ms/op 1.36
getExpectedWithdrawals 250000 eb:0.01,eth1:0.01,we:0,wn:0,smpl:16384 2.3227 ms/op 1.7034 ms/op 1.36
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,smpl:16384 2.2925 ms/op 1.8220 ms/op 1.26
getExpectedWithdrawals 250000 eb:0,eth1:0,we:0,wn:0,nocache,smpl:16384 5.3005 ms/op 3.8822 ms/op 1.37
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,smpl:16384 2.7346 ms/op 2.1550 ms/op 1.27
getExpectedWithdrawals 250000 eb:0,eth1:1,we:0,wn:0,nocache,smpl:16384 4.9476 ms/op 4.2066 ms/op 1.18
Tree 40 250000 create 363.89 ms/op 326.49 ms/op 1.11
Tree 40 250000 get(125000) 127.50 ns/op 87.878 ns/op 1.45
Tree 40 250000 set(125000) 1.2303 us/op 939.27 ns/op 1.31
Tree 40 250000 toArray() 13.590 ms/op 10.760 ms/op 1.26
Tree 40 250000 iterate all - toArray() + loop 15.116 ms/op 10.692 ms/op 1.41
Tree 40 250000 iterate all - get(i) 44.648 ms/op 32.107 ms/op 1.39
Array 250000 create 2.4804 ms/op 1.9959 ms/op 1.24
Array 250000 clone - spread 803.76 us/op 615.17 us/op 1.31
Array 250000 get(125000) 0.33700 ns/op 0.51800 ns/op 0.65
Array 250000 set(125000) 0.34400 ns/op 0.52400 ns/op 0.66
Array 250000 iterate all - loop 61.445 us/op 56.656 us/op 1.08
phase0 afterProcessEpoch - 250000 vs - 7PWei 40.940 ms/op 38.487 ms/op 1.06
Array.fill - length 1000000 3.0086 ms/op 1.8497 ms/op 1.63
Array push - length 1000000 9.9757 ms/op 6.7931 ms/op 1.47
Array.get 0.21911 ns/op 0.19625 ns/op 1.12
Uint8Array.get 0.22354 ns/op 0.19954 ns/op 1.12
phase0 beforeProcessEpoch - 250000 vs - 7PWei 16.145 ms/op 11.055 ms/op 1.46
altair processEpoch - mainnet_e81889 231.62 ms/op 233.82 ms/op 0.99
mainnet_e81889 - altair beforeProcessEpoch 17.748 ms/op 13.749 ms/op 1.29
mainnet_e81889 - altair processJustificationAndFinalization 5.3810 us/op 5.3560 us/op 1.00
mainnet_e81889 - altair processInactivityUpdates 3.7739 ms/op 3.3345 ms/op 1.13
mainnet_e81889 - altair processRewardsAndPenalties 18.645 ms/op 21.215 ms/op 0.88
mainnet_e81889 - altair processRegistryUpdates 633.00 ns/op 785.00 ns/op 0.81
mainnet_e81889 - altair processSlashings 165.00 ns/op 359.00 ns/op 0.46
mainnet_e81889 - altair processEth1DataReset 163.00 ns/op 356.00 ns/op 0.46
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.7513 ms/op 1.6296 ms/op 1.69
mainnet_e81889 - altair processSlashingsReset 792.00 ns/op 946.00 ns/op 0.84
mainnet_e81889 - altair processRandaoMixesReset 1.0430 us/op 1.3000 us/op 0.80
mainnet_e81889 - altair processHistoricalRootsUpdate 161.00 ns/op 365.00 ns/op 0.44
mainnet_e81889 - altair processParticipationFlagUpdates 493.00 ns/op 694.00 ns/op 0.71
mainnet_e81889 - altair processSyncCommitteeUpdates 127.00 ns/op 337.00 ns/op 0.38
mainnet_e81889 - altair afterProcessEpoch 43.759 ms/op 41.612 ms/op 1.05
capella processEpoch - mainnet_e217614 822.77 ms/op 742.60 ms/op 1.11
mainnet_e217614 - capella beforeProcessEpoch 88.329 ms/op 53.538 ms/op 1.65
mainnet_e217614 - capella processJustificationAndFinalization 6.0960 us/op 5.0310 us/op 1.21
mainnet_e217614 - capella processInactivityUpdates 12.738 ms/op 10.792 ms/op 1.18
mainnet_e217614 - capella processRewardsAndPenalties 98.675 ms/op 97.502 ms/op 1.01
mainnet_e217614 - capella processRegistryUpdates 5.7880 us/op 4.8390 us/op 1.20
mainnet_e217614 - capella processSlashings 164.00 ns/op 383.00 ns/op 0.43
mainnet_e217614 - capella processEth1DataReset 158.00 ns/op 392.00 ns/op 0.40
mainnet_e217614 - capella processEffectiveBalanceUpdates 17.269 ms/op 5.4102 ms/op 3.19
mainnet_e217614 - capella processSlashingsReset 790.00 ns/op 1.1990 us/op 0.66
mainnet_e217614 - capella processRandaoMixesReset 1.1120 us/op 1.3360 us/op 0.83
mainnet_e217614 - capella processHistoricalRootsUpdate 165.00 ns/op 365.00 ns/op 0.45
mainnet_e217614 - capella processParticipationFlagUpdates 496.00 ns/op 680.00 ns/op 0.73
mainnet_e217614 - capella afterProcessEpoch 113.85 ms/op 106.39 ms/op 1.07
phase0 processEpoch - mainnet_e58758 270.52 ms/op 231.79 ms/op 1.17
mainnet_e58758 - phase0 beforeProcessEpoch 59.132 ms/op 48.574 ms/op 1.22
mainnet_e58758 - phase0 processJustificationAndFinalization 6.9660 us/op 5.0540 us/op 1.38
mainnet_e58758 - phase0 processRewardsAndPenalties 20.019 ms/op 17.978 ms/op 1.11
mainnet_e58758 - phase0 processRegistryUpdates 2.8010 us/op 2.4710 us/op 1.13
mainnet_e58758 - phase0 processSlashings 166.00 ns/op 379.00 ns/op 0.44
mainnet_e58758 - phase0 processEth1DataReset 168.00 ns/op 381.00 ns/op 0.44
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 1.4659 ms/op 879.92 us/op 1.67
mainnet_e58758 - phase0 processSlashingsReset 890.00 ns/op 1.0980 us/op 0.81
mainnet_e58758 - phase0 processRandaoMixesReset 1.0910 us/op 1.2010 us/op 0.91
mainnet_e58758 - phase0 processHistoricalRootsUpdate 162.00 ns/op 443.00 ns/op 0.37
mainnet_e58758 - phase0 processParticipationRecordUpdates 855.00 ns/op 1.4440 us/op 0.59
mainnet_e58758 - phase0 afterProcessEpoch 35.462 ms/op 31.875 ms/op 1.11
phase0 processEffectiveBalanceUpdates - 250000 normalcase 1.8411 ms/op 1.4895 ms/op 1.24
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.0833 ms/op 1.5946 ms/op 1.31
altair processInactivityUpdates - 250000 normalcase 14.459 ms/op 10.400 ms/op 1.39
altair processInactivityUpdates - 250000 worstcase 12.539 ms/op 9.6307 ms/op 1.30
phase0 processRegistryUpdates - 250000 normalcase 4.6600 us/op 4.1790 us/op 1.12
phase0 processRegistryUpdates - 250000 badcase_full_deposits 210.29 us/op 243.01 us/op 0.87
phase0 processRegistryUpdates - 250000 worstcase 0.5 69.270 ms/op 63.454 ms/op 1.09
altair processRewardsAndPenalties - 250000 normalcase 17.613 ms/op 13.135 ms/op 1.34
altair processRewardsAndPenalties - 250000 worstcase 17.027 ms/op 18.518 ms/op 0.92
phase0 getAttestationDeltas - 250000 normalcase 7.2124 ms/op 5.5053 ms/op 1.31
phase0 getAttestationDeltas - 250000 worstcase 7.0519 ms/op 5.0546 ms/op 1.40
phase0 processSlashings - 250000 worstcase 109.43 us/op 92.116 us/op 1.19
altair processSyncCommitteeUpdates - 250000 11.434 ms/op 9.2651 ms/op 1.23
BeaconState.hashTreeRoot - No change 195.00 ns/op 415.00 ns/op 0.47
BeaconState.hashTreeRoot - 1 full validator 89.531 us/op 87.306 us/op 1.03
BeaconState.hashTreeRoot - 32 full validator 1.3047 ms/op 980.96 us/op 1.33
BeaconState.hashTreeRoot - 512 full validator 8.2036 ms/op 6.5908 ms/op 1.24
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 103.40 us/op 93.423 us/op 1.11
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.6614 ms/op 1.5169 ms/op 1.10
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 16.221 ms/op 13.433 ms/op 1.21
BeaconState.hashTreeRoot - 1 balances 77.556 us/op 73.836 us/op 1.05
BeaconState.hashTreeRoot - 32 balances 895.66 us/op 801.90 us/op 1.12
BeaconState.hashTreeRoot - 512 balances 6.3713 ms/op 4.8058 ms/op 1.33
BeaconState.hashTreeRoot - 250000 balances 147.99 ms/op 131.01 ms/op 1.13
aggregationBits - 2048 els - zipIndexesInBitList 20.921 us/op 19.233 us/op 1.09
regular array get 100000 times 24.411 us/op 22.771 us/op 1.07
wrappedArray get 100000 times 24.344 us/op 22.746 us/op 1.07
arrayWithProxy get 100000 times 18.423 ms/op 10.347 ms/op 1.78
ssz.Root.equals 23.579 ns/op 21.803 ns/op 1.08
byteArrayEquals 23.123 ns/op 25.063 ns/op 0.92
Buffer.compare 9.9480 ns/op 9.1360 ns/op 1.09
processSlot - 1 slots 10.581 us/op 9.8770 us/op 1.07
processSlot - 32 slots 3.0126 ms/op 2.4299 ms/op 1.24
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 4.0126 ms/op 1.9564 ms/op 2.05
getCommitteeAssignments - req 1 vs - 250000 vc 1.9004 ms/op 1.6907 ms/op 1.12
getCommitteeAssignments - req 100 vs - 250000 vc 3.6817 ms/op 3.4355 ms/op 1.07
getCommitteeAssignments - req 1000 vs - 250000 vc 3.9466 ms/op 3.6835 ms/op 1.07
findModifiedValidators - 10000 modified validators 517.23 ms/op 407.46 ms/op 1.27
findModifiedValidators - 1000 modified validators 544.12 ms/op 328.56 ms/op 1.66
findModifiedValidators - 100 modified validators 309.81 ms/op 240.79 ms/op 1.29
findModifiedValidators - 10 modified validators 132.91 ms/op 196.03 ms/op 0.68
findModifiedValidators - 1 modified validators 143.73 ms/op 129.23 ms/op 1.11
findModifiedValidators - no difference 142.66 ms/op 103.89 ms/op 1.37
migrate state 1500000 validators, 3400 modified, 2000 new 967.54 ms/op 903.43 ms/op 1.07
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 4.1400 ns/op 5.8600 ns/op 0.71
state getBlockRootAtSlot - 250000 vs - 7PWei 564.58 ns/op 481.21 ns/op 1.17
computeProposerIndex 100000 validators 1.5044 ms/op 1.3262 ms/op 1.13
getNextSyncCommitteeIndices 1000 validators 118.31 ms/op 98.630 ms/op 1.20
getNextSyncCommitteeIndices 10000 validators 118.08 ms/op 98.913 ms/op 1.19
getNextSyncCommitteeIndices 100000 validators 117.28 ms/op 98.383 ms/op 1.19
computeProposers - vc 250000 648.96 us/op 545.56 us/op 1.19
computeEpochShuffling - vc 250000 41.736 ms/op 38.770 ms/op 1.08
getNextSyncCommittee - vc 250000 10.471 ms/op 9.2830 ms/op 1.13
nodejs block root to RootHex using toHex 135.02 ns/op 115.39 ns/op 1.17
nodejs block root to RootHex using toRootHex 81.517 ns/op 75.982 ns/op 1.07
nodejs fromHex(blob) 220.06 us/op 259.74 us/op 0.85
nodejs fromHexInto(blob) 710.86 us/op 702.04 us/op 1.01
nodejs block root to RootHex using the deprecated toHexString 546.28 ns/op 529.30 ns/op 1.03
nodejs byteArrayEquals 32 bytes (block root) 28.392 ns/op 28.045 ns/op 1.01
nodejs byteArrayEquals 48 bytes (pubkey) 40.786 ns/op 41.404 ns/op 0.99
nodejs byteArrayEquals 96 bytes (signature) 39.694 ns/op 37.858 ns/op 1.05
nodejs byteArrayEquals 1024 bytes 46.212 ns/op 42.172 ns/op 1.10
nodejs byteArrayEquals 131072 bytes (blob) 1.8667 us/op 1.7469 us/op 1.07
browser block root to RootHex using toHex 269.02 ns/op 148.43 ns/op 1.81
browser block root to RootHex using toRootHex 153.93 ns/op 135.66 ns/op 1.13
browser fromHex(blob) 1.2063 ms/op 982.52 us/op 1.23
browser fromHexInto(blob) 713.81 us/op 674.16 us/op 1.06
browser block root to RootHex using the deprecated toHexString 541.98 ns/op 367.13 ns/op 1.48
browser byteArrayEquals 32 bytes (block root) 31.469 ns/op 33.547 ns/op 0.94
browser byteArrayEquals 48 bytes (pubkey) 43.602 ns/op 39.941 ns/op 1.09
browser byteArrayEquals 96 bytes (signature) 85.393 ns/op 74.737 ns/op 1.14
browser byteArrayEquals 1024 bytes 795.85 ns/op 747.04 ns/op 1.07
browser byteArrayEquals 131072 bytes (blob) 100.25 us/op 93.351 us/op 1.07

by benchmarkbot/action

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 28cf5d59e3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant